/* eslint-disable camelcase */
import { T_srv, Tsrv, ifs, ts, tvs, vue } from '@/services';
import { I_rule_const, I_rule_function, I_rule_var } from '../types';
import constant from './comps/constant.vue';
import functions from './comps/functions.vue';
import ruleLib from './comps/ruleLib.vue';
import variable from './comps/variable.vue';

// const getTreeData = () => {
//   return [
//     {
//       title: '系统常量',
//       expand: false,
//       icon: 'node',
//       nodeType: '',
//       nodeAttr: {},
//       children: [
//         {
//           title: '公司信息',
//           expand: false,
//           icon: 'node',
//           nodeType: '',
//           children: [
//             {
//               title: '公司名称',
//               icon: 'ele',
//               nodeType: 'constant',
//               nodeAttr: {
//                 name: 'name',
//                 dataType: 'string',
//                 explain: '公司名称'
//               }
//             },
//             {
//               title: '公司电话',
//               icon: 'ele',
//               nodeType: 'constant',
//               nodeAttr: {
//                 name: 'tel',
//                 dataType: 'string',
//                 explain: '公司联系电话'
//               }
//             }
//           ]
//         }
//       ]
//     },
//     {
//       title: '系统变量',
//       expand: false,
//       icon: 'node',
//       nodeType: 'variable',
//       nodeAttr: {},
//       children: [
//         {
//           title: '用户信息',
//           expand: false,
//           icon: 'node',
//           nodeType: '',
//           nodeAttr: {},
//           children: [
//             {
//               title: '当前用户ID',
//               icon: 'ele',
//               nodeType: 'variable',
//               nodeAttr: {
//                 name: 'currUserID',
//                 dataType: 'string',
//                 explain: '当前用户ID'
//               }
//             },
//             {
//               title: '当前用户编号',
//               icon: 'ele',
//               nodeType: 'variable',
//               nodeAttr: {
//                 name: 'currUserNo',
//                 dataType: 'string',
//                 explain: '当前用户编号'
//               }
//             },
//             {
//               title: '当前用户名',
//               icon: 'ele',
//               nodeType: 'variable',
//               nodeAttr: {
//                 name: 'currUserName',
//                 dataType: 'string',
//                 explain: '当前用户名'
//               }
//             }
//           ]
//         }
//       ]
//     },
//     {
//       title: '系统方法',
//       expand: false,
//       icon: 'node',
//       nodeType: '',
//       nodeAttr: {},
//       children: [
//         {
//           title: '标准方法',
//           expand: false,
//           icon: 'node',
//           nodeType: 'functions',
//           nodeAttr: {},
//           children: [
//             {
//               title: '平均值',
//               icon: 'ele',
//               nodeType: 'functions',
//               nodeAttr: {
//                 name: 'avg',
//                 inArg: '数值1~数值n',
//                 outArg: '平均值',
//                 explain: '根据传入的N个数值之和计算平均值'
//               }
//             },
//             {
//               title: '最大值',
//               icon: 'ele',
//               nodeType: 'functions',
//               nodeAttr: {
//                 name: 'max',
//                 inArg: '数值1~数值n',
//                 outArg: '最大值',
//                 explain: '根据传入的N个数值选出其中一个最大值'
//               }
//             }
//           ]
//         },
//         {
//           title: '库存模块',
//           expand: false,
//           icon: 'node',
//           children: [
//             {
//               title: '当前库存',
//               icon: 'ele',
//               nodeType: 'functions',
//               nodeAttr: {
//                 name: 'currentInventory',
//                 inArg: '物料编号',
//                 outArg: '数量',
//                 explain: '计算料号库存量'
//               }
//             },
//             {
//               title: '当前呆料',
//               icon: 'ele',
//               nodeType: 'functions',
//               nodeAttr: {
//                 name: 'currentObsoleteItems',
//                 inArg: '仓库编号',
//                 outArg: '料号清单',
//                 explain: '计算传入仓库的呆滞料'
//               }
//             }
//           ]
//         }
//       ]
//     },
//     {
//       title: '规则库',
//       expand: false,
//       icon: 'node',
//       nodeType: 'ruleLib',
//       nodeAttr: {},
//       children: [
//         {
//           title: '计算规则',
//           expand: false,
//           icon: 'node',
//           nodeType: 'ruleLib',
//           nodeAttr: {},
//           children: [
//             {
//               title: '自定义规则1',
//               icon: 'ele',
//               nodeType: 'ruleLib',
//               nodeAttr: {
//                 name: '',
//                 inArg: '',
//                 outArg: '',
//                 explain: ''
//               }
//             },
//             {
//               title: '自定义规则2',
//               icon: 'ele',
//               nodeType: 'ruleLib',
//               nodeAttr: {
//                 name: '',
//                 inArg: '',
//                 outArg: '',
//                 explain: ''
//               }
//             }
//           ]
//         }
//       ]
//     }
//   ];
// };

interface I_constData {
  name: string;
  dataType: string;
  f_comment: string;
}
interface I_varData {
  name: string;
  dataType: string;
  f_comment: string;
}
interface I_functionsData {
  name: string;
  input_arg: string;
  output_arg: string;
  f_comment: string;
}
interface I_ruleLibData {
  name: string;
  input_arg: string;
  output_arg: string;
  f_comment: string;
}
type T_resources = I_constData | I_varData | I_functionsData | I_ruleLibData;
interface I_compConf {
  name: string;
  // compBox: ifs.I_compBox;
  data: T_resources;
}

const quickList: Array<object> = [
  {
    key: `match`,
    title: '包含',
    tip: '判断: x包含"a"\n判断:[x.y.z]包含"a"',
    value: 'match "?"',
    style: 'background:#fff'
  },
  {
    key: `notBetween`,
    title: '介于',
    value: 'notBetween "?~?"',
    tip: '判断:x介于"1~10"',
    style: 'background:#fff'
  },
  {
    key: `equal`,
    title: '等于',
    value: '=',
    tip: '赋值:[x.x.x]=1;\n判断:x = 2',
    style: 'background:#fff'
  },
  {
    key: `greaterThan`,
    title: '大于',
    value: '>',
    tip: '判断:x > 2',
    style: 'background:#fff'
  },
  {
    key: `lessThan`,
    title: '小于',
    value: '<',
    tip: '判断:x < 2',
    style: 'background:#fff'
  },
  {
    key: `and`,
    title: '并且',
    value: 'and',
    tip: '判断:x=2并且x>0',
    style: 'background:#fff'
  },
  {
    key: `or`,
    title: '或者',
    value: 'or',
    tip: '判断:x=1或者x=0',
    style: 'background:#fff'
  },
  {
    key: `noMatch`,
    title: '不包含',
    value: 'notMatch "?"',
    tip: '判断: x不包含"a"\n判断:[x.y.z]不包含"a"',
    style: 'background:#fff'
  },
  {
    key: `notEqual`,
    title: '不等于',
    value: '!=',
    tip: '判断:x!=1\n判断:y!="张三"',
    style: 'background:#fff'
  },
  {
    key: `greaterThanOrEqual`,
    title: '大于等于',
    value: '>=',
    tip: '判断:x>=1',
    style: 'background:#fff'
  },
  {
    key: `lessThanOrEqual`,
    title: '小于等于',
    value: '<=',
    tip: '判断:x<=1',
    style: 'background:#fff'
  },
  {
    key: `declare`,
    title: '定义变量',
    value: 'declare',
    tip: '语法:定义变量 x=1',
    style: 'background:#fff'
  },
  // {
  //   key: `callSubProg`,
  //   title: '调用规则',
  //   value: ' call ',
  //   tip: '语法:调用规则 [xxx]()',
  //   style: 'background:#fff'
  // },
  {
    key: `add`,
    title: '加',
    value: '+',
    tip: '判断:a+b+c=1\n赋值:a=b+c;',
    style: 'background:#fff;color:blue'
  },
  {
    key: `subtract`,
    title: '减',
    value: '-',
    tip: '判断:a-b-c=1\n赋值:a=b-c',
    style: 'background:#fff;color:blue'
  },
  {
    key: `multiply`,
    title: '乘',
    value: '*',
    tip: '判断:a*b*c>100\n赋值:a=b*c',
    style: 'background:#fff;color:blue'
  },
  {
    key: `divide`,
    title: '除',
    value: '/',
    tip: '判断:a/b/c>100\n赋值:a=b/c',
    style: 'background:#fff;color:blue'
  }
];
const codeEditorConf = {
  mode: 'wyrule',
  lineNumbers: true,

  // 是否启用拖拽，默认为 true。
  dragDrop: false,
  // 行选择加亮
  styleActiveLine: true
  // 自动换行
  // lineWrapping: true,
  // // 自动焦点
  // autofocus: true,
  // smartIndent: true, // 自动缩进是否开启
  // indentUnit: 4 // 缩进单位
};
export {
  I_compConf,
  I_constData,
  I_functionsData,
  I_ruleLibData,
  I_rule_const,
  I_rule_function,
  I_rule_var,
  I_varData,
  T_resources,
  T_srv,
  Tsrv,
  codeEditorConf,
  // getTreeData,
  constant,
  functions,
  ifs,
  quickList,
  ruleLib,
  ts,
  tvs,
  variable,
  vue
};
